ammo table size reduction
reduce format from:
mmmmmmmm.iiiiiiii.pppppppp
to
mmmm.iiii.pppp

max ammo	never exceeds two bytes
image offset	can reduce to an index number from start of table
position value	float->int

~.~

add ammo to inventory
//7F0691D8:	0x9DD14	test if ammo > maximum for type
00106880	SLL	T5,S0,0x2
01B06823	SUBU	T5,T5,S0
000D6880	SLL	T5,T5,0x2
3C028003	LUI	V0,8003
004D1021	ADDU	V0,V0,T5
8FA3002C	LW	V1,002C (SP)
8C425EF0	LW	V0,5EF0 (V0)
3C0E8008	LUI	T6,8008
3C198008	LUI	T9,8008
0043082A	SLT	AT,V0,V1
10200006	BEQ	AT,R0,7F06921C
00000000	NOP
//7F069208:
8DCEA0B0	LW	T6,A0B0 (T6)
00107880	SLL	T7,S0,0x2
01CFC021	ADDU	T8,T6,T7
10000005	BEQ	R0,R0,7F06922C
AF021130	SW	V0,1130 (T9)
//7F06921C:
8F39A0B0	LW	T9,A0B0 (T9)
00104080	SLL	T0,S0,0x2
03284821	ADDU	T1,T9,T0
AD231130	SW	V1,1130 (T1)
//7F06922C:
8FBF001C	LW	RA,001C (SP)
8FB00018	LW	S0,0018 (SP)
27BD0028	ADDIU	SP,SP,0028
03E00008	JR	RA
00000000	NOP

`.`

7F0692D4	9DE04	V0=max ammo for type
00047080	SLL	T6,A0,0x2
01C47023	SUBU	T6,T6,A0
000E7080	SLL	T6,T6,0x2
3C028003	LUI	V0,8003
004E1021	ADDU	V0,V0,T6
03E00008	JR	RA
8C425EF0	LW	V0,5EF0 (V0)


7F0692F0	9DE20	set max ammo for all types
27BDFFD8	ADDIU	SP,SP,FFD8
AFB1001C	SW	S1,001C (SP)
AFB20020	SW	S2,0020 (SP)
AFB00018	SW	S0,0018 (SP)
3C118003	LUI	S1,8003
AFBF0024	SW	RA,0024 (SP)
26315EF0	ADDIU	S1,S1,5EF0	;S1=80035EF0: max ammo totals
00008025	OR	S0,R0,R0
2412001E	ADDIU	S2,R0,001E	;do 1E ammo types
//0x9DE44	iterate through each ammo type and copy!
02002025	OR	A0,S0,R0	;A0=type
0FC1A44C	JAL	7F069130	;add ammo type A0, amount A1 to inventory
8E250000	LW	A1,0000 (S1)	;A1=80035EF0+offset: max ammo for type
26100001	ADDIU	S0,S0,0001
1612FFFB	BNE	S0,S2,0x9DE44
2631000C	ADDIU	S1,S1,000C	;next ammo counter
8FBF0024	LW	RA,0024 (SP)
8FB00018	LW	S0,0018 (SP)
8FB1001C	LW	S1,001C (SP)
8FB20020	LW	S2,0020 (SP)
03E00008	JR	RA
27BD0028	ADDIU	SP,SP,0028

^.^

7F0694B0	9DFE0	V0= max ammo for weapon A0

-.-

image parameter read
//7F069DD0:	9E900	read image parameter
144000A6	BNEZ	V0,7F06A06C
8FAF005C	LW	T7,005C (SP)
000FC080	SLL	T8,T7,0x2
030FC023	SUBU	T8,T8,T7
3C198003	LUI	T9,8003
27395EF0	ADDIU	T9,T9,5EF0	;T9=80035EF0: ammo table
0018C080	SLL	T8,T8,0x2
03191821	ADDU	V1,T8,T9	;V1=p->entry in ammo type table
8C620004	LW	V0,0004 (V1)	;V0=image offset entry
24080005	ADDIU	T0,R0,0005
AFA80044	SW	T0,0044 (SP)	;SP+44=5
10400028	BEQ	V0,R0,7F069EA0	;branch if no image used
//7F069E00:
3C098009	LUI	T1,8009
8D29D0B0	LW	T1,D0B0 (T1)	;T1=8008D0B0: 7E184000-0x02000000 from start of generic image bank
AFA30028	SW	V1,0028 (SP)	;SP+28=p->ammo table middle entry
00491021	ADDU	V0,V0,T1	;V0=p->image entry in generic bank
0FC1E131	JAL	7F0784C4
AFA20048	SW	V0,0048 (SP)
0FC1E129	JAL	7F0784A4
E7A00030	SWC1	F0,0030 (SP)
0C001149	JAL	70004524
E7A00034	SWC1	F0,0034 (SP)
0C00112B	JAL	700044AC
A7A20038	SH	V0,0038 (SP)
//7F069E30:
...
//7F069E58:
8FAE0028	LW	T6,0028 (SP)
...
//7F069E7C:
C5CA0008	LWC1	F10,0008 (T6)
AFAF001C	SW	T7,001C (SP)
44069000	MFC1	A2,F18
0FC1A679	JAL	7F0699E4
E7AA0018	SWC1	F10,0018 (SP)
...


"."

//7F06A0B0	0x9EBF0
1440009B	BNEZ	V0,7F06A320
8FAA005C	LW	T2,005C (SP)
000A5880	SLL	T3,T2,0x2
016A5823	SUBU	T3,T3,T2
3C098003	LUI	T1,8003
25295EF0	ADDIU	T1,T1,5EF0
000B5880	SLL	T3,T3,0x2
01691821	ADDU	V1,T3,T1
8C620004	LW	V0,0004 (V1)
24080005	ADDIU	T0,R0,0005
AFA8003C	SW	T0,003C (SP)
10400025	BEQ	V0,R0,7F06A174
3C0C8009	LUI	T4,8009
8D8CD0B0	LW	T4,D0B0 (T4)
AFA30028	SW	V1,0028 (SP)
...
//7F06A118:
8FAA0028	LW	T2,0028 (SP)
...
//7F06A150:
C54E0008	LWC1	F14,0008 (T2)	;F14=(float) pos
AFAB001C	SW	T3,001C (SP)
44068000	MFC1	A2,F16
0FC1A679	JAL	7F0699E4
E7AE0018	SWC1	F14,0018 (SP)	;SP+18=(float) pos

'.'

//7F06A398	0x9EEC8
	BNEZ	V0,7F06A594
	LW	T7,004C (SP)
	SLL	T8,T7,0x2
	SUBU	T8,T8,T7
	LUI	T9,8003
	ADDIU	T9,T9,5EF0
	SLL	T8,T8,0x2
	ADDU	V0,T8,T9
	LW	T0,0004 (V0)
	ADDIU	T1,R0,0005
	SW	T1,003C (SP)
	SW	V0,0030 (SP)
	LW	A0,0050 (SP)
	JAL	7F05C8B4
	SW	T0,0040 (SP)	;SP+40=p->max ammo table entry
//7F06A3D4:
	LW	V1,0040 (SP)
	LUI	T2,8009
	BEQ	V1,R0,7F06A450
	NOP
	LW	T2,D0B0 (T2)
	ADDU	V1,V1,T2
	JAL	70004524
	SW	V1,0040 (SP)
//7F06A3F4:
...
	

*.*

